package com.cloud.eurekaconsumerribbonhystrix;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @EnableCircuitBreaker 开启Hystrix的使用
 * 或者使用
 * @SpringCloudApplication 包含服务发现以及断路器
 *
 * 启动工程 eureka-server、eureka-client(2个以上)、eureka-consumer-ribbon-hystrix
 * 然后访问http://localhost:2101/consumer ，得到正常的返回
 *
 * 为了触发服务降级逻辑，我们可以将服务提供者eureka-client的逻辑加一些延迟
 * Thread.sleep(5000L);   之后重启 client
 * 再次访问，得到  fallback  的返回结果
 *
 * 由于返回前延迟了5秒，而服务消费方触发了服务请求超时异常，
 * 服务消费者就通过HystrixCommand注解中指定的降级逻辑进行执行，
 * 因此该请求的结果返回了fallback。
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
//@SpringCloudApplication
public class EurekaConsumerRibbonHystrixApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

	public static void main(String[] args) {
		SpringApplication.run(EurekaConsumerRibbonHystrixApplication.class, args);
	}
}
